﻿// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.

using static SixLabors.ImageSharp.MetaData.Profiles.Exif.ExifTag;

namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
{
    internal static class ExifTags
    {
        /// <summary>
        /// The collection if Image File Directory tags
        /// </summary>
        public static readonly ExifTag[] Ifd =
        {
            SubfileType,
            OldSubfileType,
            ImageWidth,
            ImageLength,
            BitsPerSample,
            Compression,
            PhotometricInterpretation,
            Thresholding,
            CellWidth,
            CellLength,
            FillOrder,
            DocumentName,
            ImageDescription,
            Make,
            Model,
            StripOffsets,
            Orientation,
            SamplesPerPixel,
            RowsPerStrip,
            StripByteCounts,
            MinSampleValue,
            MaxSampleValue,
            XResolution,
            YResolution,
            PlanarConfiguration,
            PageName,
            XPosition,
            YPosition,
            FreeOffsets,
            FreeByteCounts,
            GrayResponseUnit,
            GrayResponseCurve,
            T4Options,
            T6Options,
            ResolutionUnit,
            PageNumber,
            ColorResponseUnit,
            TransferFunction,
            Software,
            DateTime,
            Artist,
            HostComputer,
            Predictor,
            WhitePoint,
            PrimaryChromaticities,
            ColorMap,
            HalftoneHints,
            TileWidth,
            TileLength,
            TileOffsets,
            TileByteCounts,
            BadFaxLines,
            CleanFaxData,
            ConsecutiveBadFaxLines,
            InkSet,
            InkNames,
            NumberOfInks,
            DotRange,
            TargetPrinter,
            ExtraSamples,
            SampleFormat,
            SMinSampleValue,
            SMaxSampleValue,
            TransferRange,
            ClipPath,
            XClipPathUnits,
            YClipPathUnits,
            Indexed,
            JPEGTables,
            OPIProxy,
            ProfileType,
            FaxProfile,
            CodingMethods,
            VersionYear,
            ModeNumber,
            Decode,
            DefaultImageColor,
            T82ptions,
            JPEGProc,
            JPEGInterchangeFormat,
            JPEGInterchangeFormatLength,
            JPEGRestartInterval,
            JPEGLosslessPredictors,
            JPEGPointTransforms,
            JPEGQTables,
            JPEGDCTables,
            JPEGACTables,
            YCbCrCoefficients,
            YCbCrSubsampling,
            YCbCrSubsampling,
            YCbCrPositioning,
            ReferenceBlackWhite,
            StripRowCounts,
            XMP,
            Rating,
            RatingPercent,
            ImageID,
            CFARepeatPatternDim,
            CFAPattern2,
            BatteryLevel,
            Copyright,
            MDFileTag,
            MDScalePixel,
            MDLabName,
            MDSampleInfo,
            MDPrepDate,
            MDPrepTime,
            MDFileUnits,
            PixelScale,
            IntergraphPacketData,
            IntergraphRegisters,
            IntergraphMatrix,
            ModelTiePoint,
            SEMInfo,
            ModelTransform,
            ImageLayer,
            FaxRecvParams,
            FaxSubaddress,
            FaxRecvTime,
            ImageSourceData,
            XPTitle,
            XPComment,
            XPAuthor,
            XPKeywords,
            XPSubject,
            GDALMetadata,
            GDALNoData
        };

        /// <summary>
        /// The collection of Exif tags
        /// </summary>
        public static readonly ExifTag[] Exif =
        {
            ExposureTime,
            FNumber,
            ExposureProgram,
            SpectralSensitivity,
            ISOSpeedRatings,
            OECF,
            Interlace,
            TimeZoneOffset,
            SelfTimerMode,
            SensitivityType,
            StandardOutputSensitivity,
            RecommendedExposureIndex,
            ISOSpeed,
            ISOSpeedLatitudeyyy,
            ISOSpeedLatitudezzz,
            ExifVersion,
            DateTimeOriginal,
            DateTimeDigitized,
            OffsetTime,
            OffsetTimeOriginal,
            OffsetTimeDigitized,
            ComponentsConfiguration,
            CompressedBitsPerPixel,
            ShutterSpeedValue,
            ApertureValue,
            BrightnessValue,
            ExposureBiasValue,
            MaxApertureValue,
            SubjectDistance,
            MeteringMode,
            LightSource,
            Flash,
            FocalLength,
            FlashEnergy2,
            SpatialFrequencyResponse2,
            Noise,
            FocalPlaneXResolution2,
            FocalPlaneYResolution2,
            FocalPlaneResolutionUnit2,
            ImageNumber,
            SecurityClassification,
            ImageHistory,
            SubjectArea,
            ExposureIndex2,
            TIFFEPStandardID,
            SensingMethod2,
            MakerNote,
            UserComment,
            SubsecTime,
            SubsecTimeOriginal,
            SubsecTimeDigitized,
            AmbientTemperature,
            Humidity,
            Pressure,
            WaterDepth,
            Acceleration,
            CameraElevationAngle,
            FlashpixVersion,
            ColorSpace,
            PixelXDimension,
            PixelYDimension,
            RelatedSoundFile,
            FlashEnergy,
            SpatialFrequencyResponse,
            FocalPlaneXResolution,
            FocalPlaneYResolution,
            FocalPlaneResolutionUnit,
            SubjectLocation,
            ExposureIndex,
            SensingMethod,
            FileSource,
            SceneType,
            CFAPattern,
            CustomRendered,
            ExposureMode,
            WhiteBalance,
            DigitalZoomRatio,
            FocalLengthIn35mmFilm,
            SceneCaptureType,
            GainControl,
            Contrast,
            Saturation,
            Sharpness,
            DeviceSettingDescription,
            SubjectDistanceRange,
            ImageUniqueID,
            OwnerName,
            SerialNumber,
            LensInfo,
            LensMake,
            LensModel,
            LensSerialNumber
          };

        /// <summary>
        /// The collection of GPS tags
        /// </summary>
        public static readonly ExifTag[] Gps =
        {
            GPSVersionID,
            GPSLatitudeRef,
            GPSLatitude,
            GPSLongitudeRef,
            GPSLongitude,
            GPSAltitudeRef,
            GPSAltitude,
            GPSTimestamp,
            GPSSatellites,
            GPSStatus,
            GPSMeasureMode,
            GPSDOP,
            GPSSpeedRef,
            GPSSpeed,
            GPSTrackRef,
            GPSTrack,
            GPSImgDirectionRef,
            GPSImgDirection,
            GPSMapDatum,
            GPSDestLatitudeRef,
            GPSDestLatitude,
            GPSDestLongitudeRef,
            GPSDestLongitude,
            GPSDestBearingRef,
            GPSDestBearing,
            GPSDestDistanceRef,
            GPSDestDistance,
            GPSProcessingMethod,
            GPSAreaInformation,
            GPSDateStamp,
            GPSDifferential
        };
    }
}